﻿#ifndef SQLITE_H
#define SQLITE_H

#include <QString>
#include <QStringList>
#include <QtSql/qsql.h>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlError>
#include <QSqlQuery>

#include <QWidget>
#include <QFileDialog>
#include <QMessageBox>
#include <QDebug>

#include <QTime>
#include <QDateTime>
#include <QDebug>


class MeasureSpecInfo
{
public:
    int MeasureID;//测点序号
    bool side;//CF面还是TFT面，CF面＝０，TFT面＝１
    double CL;//中心线
    double UCL;//控制上线
    double LCL;//控制下线
    double USL;//规格上线
    double LSL;//规格下线

    double startX;//视野起点
    double startY;
    double startZ;
    double startScale;//没个像素对于的实际长度，单位mm
    int startLens;//测量时的物镜
    int startIntensity_top;//上光源亮度
    int startIntensity_bottom;//下光源亮度
    int startExpoureTime;//相机曝光时间


    double endX;//视野终点
    double endY;
    double endZ;
    double endScale;//没个像素对于的实际长度，单位mm
    int endLens;//测量时的物镜
    int endIntensity_top;//上光源亮度
    int endIntensity_bottom;//下光源亮度
    int endExpoureTime;//相机曝光时间
};


class Sqlite
{
public:
    Sqlite();
    void setSqlData(QString sqlpath, QString panelName);
    void setCreateTableData(QString sqlpath, QString panelName, int measureNumber, QString description);
    bool createDataBaseFile();
    bool createDataBaseTable();
    bool clearMeasureSpec();
    bool writeSpec2Sqlite(MeasureSpecInfo measureSpecInfo);
    QString readDescription();
    /**
     * @brief readMeasureSpec   读取测点规格表内数据
     * @param list              传出参数，所有行的测点规格。
     * @return
     */
    bool readMeasureSpec(QList<MeasureSpecInfo> &list);

    /**
     * @brief readMeasureData   读取最新的测点数据，以时间排序。此函数用于linechart类中的折线图显示
     * @param dateTime          传出参数，测点数据第二列的时间
     * @param measureData       传出参数，topN行测点数据，包含每一行测点数据的每一列，不包含panelID与time
     * @param measurementNumber 传入参数，测点数量
     * @param topN      传入参数，读取多少条数据
     * @return          读取成功返回TRUE，否则false
     */
    bool readMeasureData(QList<QString> &dateTime, QList<QStringList> &measureData,int measurementNumber, int topN);
    bool writeData2Sqlite(QString panelID ,int measurementNumber, QStringList measureData);
private:
    int m_measureNumber;
    QString m_sqlPath;
    QString m_panelName;
    QString m_description;

};

#endif // SQLITE_H
